package com.lanhao.aot.mq.rocketmq.controller;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.annotation.Resource;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

import com.alibaba.fastjson.JSON;
import com.aliyun.openservices.ons.api.Message;
import com.aliyun.openservices.ons.api.SendResult;
import com.lanhao.aot.mq.rocketmq.config.RocketMQConfig;

@Controller
public class ProducerTest {
	@Resource
	private RocketMQConfig rocketMQConfig;

	/**
	 * 向RocketMQ发送消息
	 * 
	 * @return
	 */
	@GetMapping(value = "/send")
	public ResponseEntity<?> send() {
		List<String> messageList = new ArrayList<>();
		// 循环发送消息100次
		for (int i = 0; i < 100; i++) {
			// 创建消息
			Message msg = new Message(
					// 在控制台创建的 Topic，即该消息所属的 Topic 名称
					RocketMQConfig.topic,
					// Message Tag
					"",
					// Message Body
					("这是我发送的新消息" + new Date()).getBytes());

			// 设置代表消息的业务关键属性，请尽可能全局唯一，以方便您在无法正常收到消息情况下，可通过控制台查询消息并补发。注意：不设置也不会影响消息正常收发
			msg.setKey("data_id");
			// 发送消息，只要不抛异常就是成功
			SendResult sendResult = rocketMQConfig.producer().send(msg);
			// 打印 Message ID，以便用于消息发送状态查询
			messageList.add("发送成功，消息ID=" + sendResult.getMessageId());
		}
		return new ResponseEntity<>(JSON.toJSONString(messageList), HttpStatus.OK);
	}
}